package test.test_7_13;

import java.io.*;

/*
使用多线程实现方式一来实现多个文件一起复制功能(3个线程复制3个文件)，
并在控制台显示复制的进度，进度以百分比表示
例如：把文件A复制到E盘某文件夹下，在控制台上显示“XXX文件已复制xx%”，
“XXX文件已复制xxx%”……“XXX文件已复制xxx%”，“XXX复制完成！”
注: 为了更好的显示百分比推荐使用字节流进行复制操作
提示: 进度可以用当前已循环读写的字节和除以文件大小字节
 */
public class Demo01 {
    public static void main(String[] args) {
        new CopyFile("D:\\wangdao_study\\studyHard\\风景.jpg","风景copy.jpg").start();
    }
}
class CopyFile extends Thread {
    File oldFile;
    File newFile;

    public CopyFile(String oldFile, String newFile) {
        this.oldFile = new File(oldFile);
        this.newFile = new File(newFile);
    }

    @Override
    public void run() {
        //复制文件
        try {
            FileInputStream fis = new FileInputStream(oldFile);
            FileOutputStream fos = new FileOutputStream(newFile);

            //边读边写
            int readCount;
            byte[] bytes = new byte[1024];
            //用来做累加
            double temp = 0;
            long length = oldFile.length();//获取被辅助文件的字节数
            while((readCount = fis.read(bytes)) != -1) {
                fos.write(bytes);
                temp += readCount;
                double persent = temp / length *100;
                System.out.println(oldFile.getName() + "复制了："+
                        String.format("%.2f",persent)+"%");
            }
            System.out.println(oldFile.getName() + "复制完成");

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
